package com.ruoyi.qywx.service.inters;

import com.ruoyi.common.core.cache.Meta;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.function.InsertBatchFunction;
import com.ruoyi.qywx.entity.ContactTag;
import com.ruoyi.qywx.entity.ContactTagGroup;
import com.ruoyi.qywx.entity.ExtUserTag;
import com.ruoyi.qywx.getway.entity.QyExternalUserTag;
import com.ruoyi.qywx.getway.entity.QyTagGroup;
import com.ruoyi.qywx.model.vo.ContactTagGroupVo;

import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * @author : hcl
 * @Date : 2023/8/11 14:33
 */
public interface ContactTagServic {

    /**
     * @param tagIds 标签ids
     * @return 返回 Map => id : 名称
     */
    Map<Long, String> tagsTurnNameMap(Collection<Long> tagIds, Long teamId);

    /**
     * 更新或者添加标签
     */
    AjaxResult createTag(ContactTag contactTag);

    /**
     *
     */
    void insertTagGroup(ContactTagGroup group);

    /**
     * 更新或者添加分组
     */
    AjaxResult createGroup(ContactTagGroup build);

    /**
     * @param type   类型 0 自建，1企业微信
     * @param teamId 项目id
     */
    List<ContactTagGroupVo> tagList(Integer type, Long teamId);

    /**
     * 批量添加标签
     */
    void insertTag(List<ContactTag> contactTags);

    /**
     * @param groupWxIds null时 查询team下所有的group
     */
    List<ContactTagGroup> selectQiyeGroups(Meta meta, List<String> groupWxIds);

    void updateTagGroupById(ContactTagGroup group);

    List<ContactTag> selectTagsByGroupId(Long groupId);


    void updateTagName(ContactTag contactTag);

    void deleteTagGroups(Collection<Long> groupIds);

    void deleteTags(List<Long> tagIds);

    ContactTagGroup selectGroupById(Long id);

    void deleteQywxNoexistGroups(List<Long> groupIds);

    AjaxResult deleteTagGroup(Integer type, Long id, Long teamId);

    AjaxResult deleteTag(Integer type, Long id, Long teamId);

    List<ContactTag> selectTagByIds(List<Long> toLongList);

    boolean extUserBindTags(String extUserId, String userId, List<Long> bindTags, Meta meta);

    /**
     * 用户详情中的标签处理
     * 可能标签已经移除了，移除标签只需要更新库
     * 可能需要新增标签
     *
     * @param tags 用户身上的标签
     */
    void extContactTagsProcess(String extUserId, String userId, List<QyExternalUserTag> tags, Meta meta);

    /**
     * 根据不存在的微信id 入库
     *
     * @param inexistTagWxIds 不存在的微信标签id
     */
    void insertQywxTags(List<String> inexistTagWxIds, Meta meta, InsertBatchFunction<ContactTag> insertFun);

    void updateQywxTags(List<String> tagWxIds,Meta meta);

    void updateQywxTagGroup(String groupWxId, Meta meta);

    void deleteTag(String tagWxId, Long teamId);

    void deleteTagGroup(String groupWxId, Long teamId);

    List<ExtUserTag> selectFollowerTags(List<String> extUserIds, List<String> userIds);
}
